﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Biblioteca.dao.iClassesDAO.equipamento;
using Biblioteca.classesBasicas.equipamento;
using Biblioteca.util;
using System.Data.SqlClient;

namespace Biblioteca.dao.classesDAO.equipamento
{
    class ArmaDAO : Conexao, IArmaDAO 
    {
        public void cadastrar(Arma objeto)
        {
             try
            {
                this.abrirConexao();
                SqlCommand comandoSql = conexao.CreateCommand();
                comandoSql.CommandText = "INSERT INTO ARMA(NOME, TIPO, MARCA, VALOR) VALUES ('" + objeto.Nome + "','" + objeto.Tipo + "','" + objeto.Marca+ "','" + objeto.Valor+ "')";
                comandoSql.ExecuteNonQuery();
                comandoSql.Dispose();
                this.fecharConexao();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao cadastar Arma.");
            }
            finally
            {
                this.fecharConexao();
            }
        
        }

        public void alterar(Arma objeto)
        {
            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("UPDATE ARMA SET NOME='" + objeto.Nome + "', TIPO='" + objeto.Tipo+ "', MARCA='" + objeto.Marca+ "', VALOR='" + objeto.Valor+ "'" + " WHERE ARMA.ID_ARMA = " + Convert.ToInt32(objeto.Id), this.conexao);
                comando.ExecuteNonQuery();
                comando.Dispose();
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao alterar Arma.");
            }

            finally
            {
                this.fecharConexao();
            }

        }

        public void remover(Arma objeto)
        {
            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("EXEC PROCEDURE_DELETAR_ARMA " + Convert.ToInt32(objeto.Id), this.conexao);
                comando.ExecuteNonQuery();
                comando.Dispose();
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao remover Arma.");
            }

            finally
            {
                this.fecharConexao();
            }
        }


        public Arma consultarPorId(string id)
        {
            Arma armaMetodo = null;

             try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("SELECT ID_ARMA, NOME, TIPO, MARCA, VALOR FROM ARMA WHERE ARMA.ID_ARMA=" + Convert.ToInt32(id), this.conexao);
                SqlDataReader DbReader = comando.ExecuteReader();
                if (DbReader.Read())
                {
                    armaMetodo = new Arma();
                    armaMetodo.Id = Convert.ToString(DbReader.GetInt32(DbReader.GetOrdinal("ID_ARMA")));
                    armaMetodo.Nome = DbReader.GetString(DbReader.GetOrdinal("NOME"));
                    armaMetodo.Tipo = DbReader.GetString(DbReader.GetOrdinal("TIPO"));
                    armaMetodo.Marca = DbReader.GetString(DbReader.GetOrdinal("MARCA"));
                    armaMetodo.Valor = DbReader.GetString(DbReader.GetOrdinal("VALOR"));
                    //armaMetodo.Imagem = DbReader.GetString(DbReader.GetOrdinal("IMAGEM"));
                }

                DbReader.Close();
                comando.Dispose();
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao consultar o Arma.");
            }

            finally
            {
                this.fecharConexao();
            }
            return armaMetodo;
        }

        public List<Arma> listar()
        {
            List<Arma> listaArma = new List<Arma>();

            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("SELECT ID_ARMA, NOME, TIPO, MARCA, VALOR FROM ARMA", this.conexao);
                SqlDataReader DbReader = comando.ExecuteReader();
                while (DbReader.Read())
                {
                    Arma armaMetodo = new Arma();
                    armaMetodo.Id = Convert.ToString(DbReader.GetInt32(DbReader.GetOrdinal("ID_ARMA")));
                    armaMetodo.Nome = DbReader.GetString(DbReader.GetOrdinal("NOME"));
                    armaMetodo.Tipo = DbReader.GetString(DbReader.GetOrdinal("TIPO"));
                    armaMetodo.Marca = DbReader.GetString(DbReader.GetOrdinal("MARCA"));
                    armaMetodo.Valor = DbReader.GetString(DbReader.GetOrdinal("VALOR"));
                    //armaMetodo.Imagem = DbReader.GetString(DbReader.GetOrdinal("IMAGEM"));

                    listaArma.Add(armaMetodo);
                }

                DbReader.Close();
                comando.Dispose();
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao listar o Arma.");
            }

            finally
            {
                this.fecharConexao();
            }
            return listaArma;

        }
    }
}
